// src/utils/branchDataGenerator.js

import { faker } from '@faker-js/faker/locale/zh_CN';

// 辅助函数：生成单个支委成员
const generateCommitteeMember = () => ({
  memberId: faker.string.uuid(),
  memberName: faker.person.fullName(),
  genderType: faker.helpers.arrayElement(['男', '女']),
  phoneNumber: faker.phone.number('1##########'),
  positionHeld: faker.helpers.arrayElement(['支部书记', '副书记', '组织委员', '宣传委员', '纪检委员']),
});

// 辅助函数：生成单个支委换届记录
const generateCommittee = (index) => {
  const startDate = faker.date.past({ years: 5 - index });
  const endDate = index === 0 ? null : new Date(startDate.getTime() + 365 * 24 * 60 * 60 * 1000); // 第一届至今
  return {
    committeeId: faker.string.uuid(),
    startDate: startDate.toISOString().split('T')[0],
    endDate: endDate ? endDate.toISOString().split('T')[0] : null,
    committeeMembers: Array.from({ length: faker.number.int({ min: 3, max: 5 }) }, generateCommitteeMember),
  };
};

// 辅助函数：生成单个党支部活动
const generateActivity = () => ({
  activityId: faker.string.uuid(),
  activityDate: faker.date.recent({ days: 365 }).toISOString().split('T')[0],
  activityName: faker.helpers.arrayElement(['学习二十大精神主题党日活动', '“不忘初心、牢记使命”主题教育', '参观红色教育基地', '预备党员转正大会', '支部组织生活会']),
  participants: Array.from({ length: faker.number.int({ min: 10, max: 20 }) }, () => faker.string.uuid()),
  activityContent: faker.lorem.paragraph(3),
  interactionSummary: faker.lorem.paragraph(2),
});

/**
 * 生成单个完整的党支部数据对象
 * @returns {object} 一个党支部对象
 */
export const generateBranchData = () => {
  const branchType = faker.helpers.arrayElement(['本科生党支部', '硕士研究生党支部', '博士研究生党支部']);
  const grade = faker.helpers.arrayElement(['2021级', '2022级', '2023级']);
  const number = faker.helpers.arrayElement(['第一', '第二', '第三']);

  return {
    branchId: faker.string.uuid(),
    branchName: `${grade}软件工程${number}${branchType}`,
    branchType: branchType.replace('党支部', ''), // 本科, 硕士, 博士
    branchDescription: `这是一个专注于${grade}学生党员培养和发展的${branchType}。`,
    
    // 生成最近3届的支委记录
    branchCommittees: Array.from({ length: 3 }, (_, i) => generateCommittee(i)),
    
    // 生成10到15个活动记录
    branchActivities: Array.from({ length: faker.number.int({ min: 10, max: 15 }) }, generateActivity),

    // 生成20到30个当前成员ID
    currentMembers: Array.from({ length: faker.number.int({ min: 20, max: 30 }) }, () => faker.string.uuid()),
  };
};

/**
 * 批量生成党支部数据
 * @param {number} count - 需要生成的数量
 * @returns {Array<object>} 党支部对象数组
 */
export const generateBranchDataBatch = (count) => {
  return Array.from({ length: count }, generateBranchData);
};